package pseudoAssemblerCompiler.twopassassembler.view.firstpass;

import org.apache.commons.lang.StringUtils;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import pseudoAssemblerCompiler.twopassassembler.view.common.CTabContainer;
import pseudoAssemblerCompiler.twopassassembler.view.common.IView;
import pseudoAssemblerCompiler.twopassassembler.view.util.CTabFolderContainer;

/**
 * Нижний контейнер, куда выводятся все ошибки
 * и двоичный код программы
 * @author Чекашов Р. И.
 *
 */
public class Console implements IView {

    /**
     * Основной контейнер представления второго прохода
     */
    private Composite _composite;
    
    /**
     * Вспомогательная таблица
     */
    private StyledText _consoleOutput;

    // create the Colors
    Color red = new Color(Display.getCurrent(), 150, 0, 0);

    public StyledText getTextField() {
        return _consoleOutput;
    }

    public void error(String s) {
        if(StringUtils.isEmpty(s)) {
            return;
        }
        StyleRange styleRange = new StyleRange();
        styleRange.start = _consoleOutput.getText().length();
        styleRange.length = s.length();
        styleRange.fontStyle = SWT.BOLD;
        styleRange.foreground = red;
        _consoleOutput.append(s);
        _consoleOutput.setStyleRange(styleRange);
    }

    public Console(Composite aParent) {
        CTabFolderContainer tabFolder = new CTabFolderContainer(aParent);
        _composite = new Composite(tabFolder.createCTabItem("Консоль"), SWT.NONE);
        tabFolder.get_cTabFolder().addCTabFolder2Listener(new CTabFolder2Adapter(){
            @Override
            public void close(CTabFolderEvent event) {
                event.doit = false;
            }
        });
        _consoleOutput = new StyledText(_composite, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
        Font font = new Font(Display.getCurrent(), "Arial", 10, SWT.NORMAL);
        _consoleOutput.setFont(font);
        listeners();
    }

    private void listeners() {

    }

    /**
     * Располагаем элементы в определённом порядке
     */
    private void layouts() {
        FormData data;

        data = new FormData();
        data.top = new FormAttachment(0, 0); // Attach to top
        data.left = new FormAttachment(0, 0); // Attach halfway across
        data.bottom = new FormAttachment(100, 0); // Attach to bottom
        data.right = new FormAttachment(100, 0);
        _composite.setLayout(new FormLayout());
        _composite.setLayoutData(data);

        //Sash - переплёт
        data = new FormData();
        data.top = new FormAttachment(0, 0); // Attach to top
        data.left = new FormAttachment(0, 0); // Attach halfway across
        data.bottom = new FormAttachment(100, 0); // Attach to bottom
        data.right = new FormAttachment(100, 0);
        _consoleOutput.setLayoutData(data);
    }
    
    public String getText() {
        String text = null;
        if (_consoleOutput != null) {
            text = _consoleOutput.getText();
        }
        return text;
    }

    @Override
    public void setLayoutData(Object layoutData) {
        _composite.setLayoutData(layoutData);
    }

    @Override
    public void show() {
        layouts();
    }

    @Override
    public Composite getComposite() {
        return _composite;
    }

    @Override
    public void setController(Object controller) {
        //this method do nothing
    }
}
